package co.edu.udistrital.audiomixer.entidad;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import co.edu.udistrital.audiomixer.comun.IEntidad;

/**
 * A representation of the model object '<em><b>Proyecto</b></em>'. <!--
 * begin-user-doc --> <!-- end-user-doc -->
 * 
 * @generated
 */
@Entity(name = "Proyecto")
public class Proyecto implements IEntidad, Serializable {

	/**
	 * @generated
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	@Id()
	private int id = 0;

	/**
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	@Basic()
	private String nombre = null;

	/**
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	@Basic()
	private int compasNumerador = 0;

	/**
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	@Basic()
	private int compasDenominador = 0;

	/**
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	@ManyToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST,
			CascadeType.REFRESH })
	@JoinTable(joinColumns = { @JoinColumn(name = "proyecto") }, inverseJoinColumns = { @JoinColumn(name = "pista") }, name = "proyecto_pistas")
	private List<Pista> pistas = new ArrayList<Pista>();

	/**
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	@ManyToMany(cascade = { CascadeType.REFRESH })
	@JoinTable(joinColumns = { @JoinColumn(columnDefinition = "", name = "proyecto") }, inverseJoinColumns = { @JoinColumn(name = "usuario") }, name = "proyecto_usuariosproyecto")
	private List<Usuario> usuariosProyecto = new ArrayList<Usuario>();

	/**
	 * Returns the value of '<em><b>id</b></em>' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @return the value of '<em><b>id</b></em>' feature
	 * @generated
	 */
	public int getId() {
		return id;
	}

	/**
	 * Sets the '{@link Proyecto#getId() <em>id</em>}' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @param newId
	 *            the new value of the '{@link Proyecto#getId() id}' feature.
	 * @generated
	 */
	public void setId(int newId) {
		id = newId;
	}

	/**
	 * Returns the value of '<em><b>nombre</b></em>' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @return the value of '<em><b>nombre</b></em>' feature
	 * @generated
	 */
	public String getNombre() {
		return nombre;
	}

	/**
	 * Sets the '{@link Proyecto#getNombre() <em>nombre</em>}' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @param newNombre
	 *            the new value of the '{@link Proyecto#getNombre() nombre}'
	 *            feature.
	 * @generated
	 */
	public void setNombre(String newNombre) {
		nombre = newNombre;
	}

	/**
	 * Returns the value of '<em><b>compasNumerador</b></em>' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @return the value of '<em><b>compasNumerador</b></em>' feature
	 * @generated
	 */
	public int getCompasNumerador() {
		return compasNumerador;
	}

	/**
	 * Sets the '{@link Proyecto#getCompasNumerador() <em>compasNumerador</em>}'
	 * feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @param newCompasNumerador
	 *            the new value of the '{@link Proyecto#getCompasNumerador()
	 *            compasNumerador}' feature.
	 * @generated
	 */
	public void setCompasNumerador(int newCompasNumerador) {
		compasNumerador = newCompasNumerador;
	}

	/**
	 * Returns the value of '<em><b>compasDenominador</b></em>' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @return the value of '<em><b>compasDenominador</b></em>' feature
	 * @generated
	 */
	public int getCompasDenominador() {
		return compasDenominador;
	}

	/**
	 * Sets the '{@link Proyecto#getCompasDenominador()
	 * <em>compasDenominador</em>}' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @param newCompasDenominador
	 *            the new value of the '{@link Proyecto#getCompasDenominador()
	 *            compasDenominador}' feature.
	 * @generated
	 */
	public void setCompasDenominador(int newCompasDenominador) {
		compasDenominador = newCompasDenominador;
	}

	/**
	 * Returns the value of '<em><b>pistas</b></em>' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @return the value of '<em><b>pistas</b></em>' feature
	 * @generated
	 */
	public List<Pista> getPistas() {
		return pistas;
	}

	/**
	 * Adds to the <em>pistas</em> feature.
	 * 
	 * @param pistasValue
	 *            the value to add
	 * 
	 * @generated
	 */
	public void addToPistas(Pista pistasValue) {
		if (!pistas.contains(pistasValue)) {
			pistas.add(pistasValue);
		}
	}

	/**
	 * Removes from the <em>pistas</em> feature.
	 * 
	 * @param pistasValue
	 *            the value to remove
	 * 
	 * @generated
	 */
	public void removeFromPistas(Pista pistasValue) {
		if (pistas.contains(pistasValue)) {
			pistas.remove(pistasValue);
		}
	}

	/**
	 * Clears the <em>pistas</em> feature.
	 * 
	 * @generated
	 */
	public void clearPistas() {
		while (!pistas.isEmpty()) {
			removeFromPistas(pistas.iterator().next());
		}
	}

	/**
	 * Sets the '{@link Proyecto#getPistas() <em>pistas</em>}' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @param newPistas
	 *            the new value of the '{@link Proyecto#getPistas() pistas}'
	 *            feature.
	 * @generated
	 */
	public void setPistas(List<Pista> newPistas) {
		pistas = newPistas;
	}

	/**
	 * Returns the value of '<em><b>usuariosProyecto</b></em>' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @return the value of '<em><b>usuariosProyecto</b></em>' feature
	 * @generated
	 */
	public List<Usuario> getUsuariosProyecto() {
		return usuariosProyecto;
	}

	/**
	 * Adds to the <em>usuariosProyecto</em> feature.
	 * 
	 * @param usuariosProyectoValue
	 *            the value to add
	 * 
	 * @generated
	 */
	public void addToUsuariosProyecto(Usuario usuariosProyectoValue) {
		if (!usuariosProyecto.contains(usuariosProyectoValue)) {
			usuariosProyecto.add(usuariosProyectoValue);
		}
	}

	/**
	 * Removes from the <em>usuariosProyecto</em> feature.
	 * 
	 * @param usuariosProyectoValue
	 *            the value to remove
	 * 
	 * @generated
	 */
	public void removeFromUsuariosProyecto(Usuario usuariosProyectoValue) {
		if (usuariosProyecto.contains(usuariosProyectoValue)) {
			usuariosProyecto.remove(usuariosProyectoValue);
		}
	}

	/**
	 * Clears the <em>usuariosProyecto</em> feature.
	 * 
	 * @generated
	 */
	public void clearUsuariosProyecto() {
		while (!usuariosProyecto.isEmpty()) {
			removeFromUsuariosProyecto(usuariosProyecto.iterator().next());
		}
	}

	/**
	 * Sets the '{@link Proyecto#getUsuariosProyecto()
	 * <em>usuariosProyecto</em>}' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @param newUsuariosProyecto
	 *            the new value of the '{@link Proyecto#getUsuariosProyecto()
	 *            usuariosProyecto}' feature.
	 * @generated
	 */
	public void setUsuariosProyecto(List<Usuario> newUsuariosProyecto) {
		usuariosProyecto = newUsuariosProyecto;
	}

	/**
	 * A toString method which prints the values of all EAttributes of this
	 * instance. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	@Override
	public String toString() {
		return "Proyecto " + " [id: " + getId() + "]" + " [nombre: "
				+ getNombre() + "]" + " [compasNumerador: "
				+ getCompasNumerador() + "]" + " [compasDenominador: "
				+ getCompasDenominador() + "]";
	}
}
